/** Fichier définissant une équipotentielle.
 *
 * Ce fichier contient la définition de la classe abstraite Equipotentielle.
 *
 * @file Equipotentielle.hpp
 * @author Johan "Solo" Luisier
 * @date 27 Février 2013
 */
#ifndef EQUIPOTENTIELLE_HPP
#define EQUIPOTENTIELLE_HPP

#include "Forme.hpp"

/** Classe qui implémente une équipotentielle: un forme donnée par un
 * potentiel.
 *
 * Cette classe abstraite définit l'interface pour une classe possédant un
 * potentiel qui permet de définir une surface. Dans un premier temps le but
 * est de définir des formes avec un potentiel central, mais on peut imaginer
 * des formes avec plusieurs "attracteurs" pour avoir des résultats plus
 * intéressants.
 *
 * @author Johan "Solo" Luisier
 * @date 27 Février 2013
 *
 * @class Equipotentielle "Equipotentielle.hpp" "Formes/Equipotentielle.hpp"
 */
class Equipotentielle : public Forme
{
public:
    Equipotentielle( const std::string& nom, const Transformation& tr = Transformation() );
    virtual ~Equipotentielle();
    const double& potentielDeSurface() const;
protected:
    /** Valeur du potentiel définissant la surface.
     */
    double PotentielDeSurface;
private:
    /** Méthode qui définit le potentiel de l'interaction.
     *
     * Cette méthode définit la forme du volume.
     *
     * @param[in] pt point pour lequel on veut évaluer le potentiel.
     *
     * @return la valeur du potentiel au point @c pt.
     */
    virtual double potentiel( const Coord& pt ) const = 0;
};

#endif // EQUIPOTENTIELLE_HPP
